package com.zmj.sy.mom.srv.aps.utils;

import cn.hutool.core.date.DateUtil;
import com.zmj.sy.mom.srv.aps.bean.vo.report.ReportWorkStationCutResVo;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.List;

public class CutUseRateUtils {

    public static BigDecimal getCutUseRate(List<ReportWorkStationCutResVo> reqVo, Integer i) {
        // i 等于 0 工作组， 等于 1 工位
        if (reqVo.get(0).getGroupNumber().startsWith("1-1")) {
            return getRateHG(reqVo, i);
        } else if (reqVo.get(0).getGroupNumber().startsWith("1-2")) {
            return getRateJG1(reqVo, i);
        } else if (reqVo.get(0).getGroupNumber().startsWith("1-3")) {
            return getRateJG2(reqVo, i);
        } else {
            return BigDecimal.ZERO;
        }
    }

    public static BigDecimal getRateHG(List<ReportWorkStationCutResVo> plateList, Integer i) {
        // 火焰切割机 6台
        // 切割长度转换： d 厚度 L 转换长度 （40,45,50,55,60,70,80,100毫米）
        // 转化切割长度 = 实际切割长度 * 0.35 / （0.51 - d / 200 + d * d / 40000）
        // 单台切割机单日切割 40 厚钢板 168 m
        // 实际产能利用率 = 所有转化后的切割长度总和 / 所有切割机每个班次的切割长度总和 / 0.89 * 100%

        BigDecimal cutLength = BigDecimal.ZERO;
        BigDecimal rl = BigDecimal.valueOf(168).multiply(BigDecimal.valueOf(6));
        for (ReportWorkStationCutResVo vo : plateList) {
            if (isToday(vo.getTime())) {
                BigDecimal r = vo.getCutTotalLength().divide(BigDecimal.valueOf(1000), 8, RoundingMode.HALF_UP); // 钢板实际切割长度
                BigDecimal d = vo.getThickness(); // 钢板厚度
                BigDecimal a = d.multiply(d).divide(BigDecimal.valueOf(40000), 8, RoundingMode.HALF_UP);
                BigDecimal b = d.divide(BigDecimal.valueOf(200), 8, RoundingMode.HALF_UP);
                BigDecimal c = BigDecimal.valueOf(0.51).subtract(b).add(a);
                BigDecimal l = r.multiply(BigDecimal.valueOf(0.35)).divide(c, 8, RoundingMode.HALF_UP); // 转化后的切割长度
                cutLength = cutLength.add(l);
            }
        }
        BigDecimal rate = cutLength.divide(rl, 8, RoundingMode.HALF_UP).divide(BigDecimal.valueOf(0.89), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));;
        if (i == 0) {
            return rate;
        } else {
            return rate.multiply(BigDecimal.valueOf(6));
        }
    }

    public static BigDecimal getRateJG1(List<ReportWorkStationCutResVo> plateList, Integer i) {
        // 激光切割机 1 跨 8台
        // 切割长度转换： d 厚度 L 转换长度 （12,16,20毫米）
        // 转化切割长度 = 实际切割长度 * 3.2 / （3.8 - 0.05 * d）
        // 单台切割机单日切割 12 厚钢板 1536 m
        // 实际产能利用率 = 所有转化后的切割长度总和 / 所有切割机每个班次的切割长度总和 / 0.85737 * 100%

        BigDecimal cutLength = BigDecimal.ZERO;
        BigDecimal rl = BigDecimal.valueOf(1536).multiply(BigDecimal.valueOf(8));
        for (ReportWorkStationCutResVo vo : plateList) {
            if (isToday(vo.getTime())) {
                BigDecimal r = vo.getCutTotalLength().divide(BigDecimal.valueOf(1000), 8, RoundingMode.HALF_UP); // 钢板实际切割长度
                BigDecimal d = vo.getThickness(); // 钢板厚度
                BigDecimal a = d.multiply(BigDecimal.valueOf(0.05));
                BigDecimal b = BigDecimal.valueOf(3.8).subtract(a);
                BigDecimal l = r.multiply(BigDecimal.valueOf(3.2)).divide(b, 8, RoundingMode.HALF_UP); // 转化后的切割长度
                cutLength = cutLength.add(l);
            }
        }
        BigDecimal rate = cutLength.divide(rl, 8, RoundingMode.HALF_UP).divide(BigDecimal.valueOf(0.85737), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (i == 0) {
            return rate;
        } else {
            return rate.multiply(BigDecimal.valueOf(8));
        }
    }

    public static BigDecimal getRateJG2(List<ReportWorkStationCutResVo> plateList, Integer i) {
        // 激光切割机 2 跨 6台
        // 切割长度转换： d 厚度 L 转换长度 （25,30,40毫米）
        // 转化切割长度 = 实际切割长度 * 1.2 / （d * d / 600 - 79 * d / 600 + 3.45）
        // 单台切割机单日切割 25 厚钢板 576 m
        // 实际产能利用率 = 所有转化后的切割长度总和 / 所有切割机每个班次的切割长度总和 / 0.9274 * 100%

        BigDecimal cutLength = BigDecimal.ZERO;
        BigDecimal rl = BigDecimal.valueOf(576).multiply(BigDecimal.valueOf(6));
        for (ReportWorkStationCutResVo vo : plateList) {
            BigDecimal r = vo.getCutTotalLength().divide(BigDecimal.valueOf(1000), 8, RoundingMode.HALF_UP); // 钢板实际切割长度
            BigDecimal d = vo.getThickness(); // 钢板厚度
            BigDecimal a = d.multiply(d).divide(BigDecimal.valueOf(600), 8, RoundingMode.HALF_UP);
            BigDecimal b = d.multiply(BigDecimal.valueOf(79)).divide(BigDecimal.valueOf(600), 8, RoundingMode.HALF_UP);
            BigDecimal c = a.subtract(b).add(BigDecimal.valueOf(3.45));
            BigDecimal l = r.multiply(BigDecimal.valueOf(1.2)).divide(c, 8, RoundingMode.HALF_UP); // 转化后的切割长度
            cutLength = cutLength.add(l);
        }
        BigDecimal rate = cutLength.divide(rl, 8, RoundingMode.HALF_UP).divide(BigDecimal.valueOf(0.9274), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (i == 0) {
            return rate;
        } else {
            return rate.multiply(BigDecimal.valueOf(6));
        }
    }

    public static boolean isToday(LocalDateTime d) {
        String t = String.valueOf(d);
        String time = DateUtils.parseDate(t).toDateStr();
        String today = DateUtil.date().toDateStr();

//        String ti = "2024-11-30 17:35:37";
//        String to = DateUtils.parseDate(ti).toDateStr();
//        return time.equals(to);

        return time.equals(today);
    }

}
